package com.sunriz.javafx.server.utils.modbus.util;

import com.fazecast.jSerialComm.SerialPort;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 串口工具类
 * @author wusq
 * @date 2021/1/1
 */
public class SerialPortUtils {
    private static Logger log = LoggerFactory.getLogger(SerialPortUtils.class);

    /**
     * 打开串口
     * @param portName 串口名
     * @param baudRate 波特率
     * @param dataBits 数据位
     * @param stopBits 停止位
     * @param parity 校验位
     * @return 串口对象
     */
    public static SerialPort open(String portName, Integer baudRate, Integer dataBits,
                                  Integer stopBits, Integer parity) {
        SerialPort result = null;
        try {
            // 获取串口对象
            SerialPort serialPort = SerialPort.getCommPort(portName);
            // 打开串口
            if (serialPort.openPort()) {
                // 设置串口参数
                serialPort.setBaudRate(baudRate);
                serialPort.setNumDataBits(dataBits);
                serialPort.setNumStopBits(stopBits);
                serialPort.setParity(parity);

                // 配置成功，日志记录
                log.info("打开串口{}成功", portName);
                result = serialPort;
            } else {
                log.error("打开串口{}失败", portName);
            }
        } catch (Exception e) {
            log.error("打开串口{}错误", portName, e);
        }
        return result;
    }

    /**
     * 关闭串口
     * @param serialPort 串口对象
     */
    public static void close(SerialPort serialPort) {
        if (serialPort != null) {
            serialPort.closePort();
            log.warn("串口{}关闭", serialPort.getSystemPortName());
        }
    }
}
